home *** CD-ROM | disk | FTP | other *** search
/ World of Amiga / World of Amiga.iso / archive / assembly / angint9.s.lha / intro6.s < prev    next >
Text File  |  1980-02-15  |  34KB  |  1,792 lines

  1. ;This is the 'Fireworks Intro II' ! Coded by CORTO
  2. ;Only for Angels members !
  3.  
  4. ; A,  Jrun
  5. ; WI  filename  run  end
  6. ; Ltext:
  7. ; L*** for comments
  8.  
  9.  
  10. org $40000
  11. load $40000
  12.  
  13. run:
  14. movem.L d0-d7/a0-a6,-(sp)
  15. bsr.L save_all
  16. lea $50000,a0
  17. move #$98ff,d7
  18. run1:
  19. clr.l (a0)+
  20. dbra d7,run1
  21.  
  22. lea font,a0
  23. lea fonts,a1
  24. move #1727,d7
  25. run2:
  26. move (a0)+,(a1)+
  27. clr (a1)+
  28. dbra d7,run2
  29.  
  30. bsr.L makedet
  31. move #15,d6
  32. run3:
  33. bsr.L makecopper
  34. dbra d6,run3
  35. bsr.L rectifzoom
  36. move #$100,coltab2+2
  37. lea $dff000,a6
  38. move #$3fff,$9a(a6)
  39. move #$c000,$9a(a6)
  40. move #$3fff,$96(a6)
  41. move #$83c0,$96(a6)
  42. move.L #copperlist,$80(a6)
  43. clr $88(a6)
  44. bsr.L init_music
  45. lea $dff000,a6
  46. bsr.L normal
  47.  
  48.  
  49. move.L #%111101111011100111101111,$63780+38
  50. move.L #%100001001010100011001001,$63780+64+38
  51. move.L #%100001001011100011001001,$63780+128+38
  52. move.l #%100001001010010011001001,$63780+192+38
  53. move.l #%111101111010010011001111,$63780+256+38
  54.  
  55. wait:
  56. cmpi.b #1,6(a6)
  57. bne.s wait
  58. tst.b 5(a6)
  59. bne.s wait
  60. move.L bpw,d0
  61. move.L bpa,bpw
  62. move.l d0,bpa
  63. move d0,copbpl3d+6
  64. swap d0
  65. move d0,copbpl3d+2
  66. swap d0
  67. addi.l #64,d0
  68. move d0,copbpl3d+14
  69. swap d0
  70. move d0,copbpl3d+10
  71. lea $dff000,a6
  72. bsr.L clear3d
  73. bsr.L calcule
  74. bsr.L play
  75. lea $dff000,a6
  76. bsr.L draw
  77.  
  78. ;lea $dff000,a6
  79. move.b delai,d0
  80. add.b d0,wait1
  81. tst.b wait1
  82. bne.s irq1
  83. bsr.L print
  84. irq1:bsr.L cycle
  85.  
  86. clr boum+2
  87.  
  88. lea det,a0
  89. lea bp1,a4
  90. bsr.L polaire
  91.  
  92. lea det+[40*nbdata],a0
  93. lea bp3,a4
  94. bsr.L polaire
  95.  
  96.     addi.b #2,cpal2
  97. bne.s irq03
  98.     bsr.L makecopper
  99.  
  100. irq03:
  101. addi.b #$40,cpal
  102. bne.s irq3
  103.  
  104. tst colmap1+2
  105. beq.s irq01
  106. move colmap1+2,d0
  107. bsr.s noir
  108. move d0,colmap1+2
  109. irq01:
  110. tst colmap2+2
  111. beq.s irq3
  112. move colmap2+2,d0
  113. bsr.s noir
  114. move d0,colmap2+2
  115. move d0,colmap2+6
  116. irq3:
  117. lea $dff000,a6
  118.  
  119. ;move #$f00,$dff180
  120.  
  121. btst #6,$bfe001
  122. bne.L wait
  123. bsr.L end_music
  124. bsr.L restore_all
  125. movem.L (sp)+,d0-d7/a0-a6
  126. rts
  127. wait1:dc.b 0
  128. delai:dc.b $40
  129. delai2:dc.l $c9f00000
  130. even
  131. speedtable:dc.W $10f9,$20e9,$40c9,$8089
  132.  
  133. noir:
  134. move d0,d1
  135. move d0,d2
  136. move d0,d3
  137. and #$f00,d1
  138. tst d1
  139. beq.s noir1
  140. sub #$100,d1
  141. noir1:and #$f0,d2
  142. tst d2
  143. beq.s noir2
  144. sub #$10,d2
  145. noir2:and #$f,d3
  146. tst d3
  147. beq.s noir3
  148. subq #1,d3
  149. noir3:
  150. or d3,d1
  151. or d2,d1
  152. move d1,d0
  153. rts
  154.  
  155. cpal:dc.b 0
  156. cpal2:dc.b 0
  157.  
  158. clear3d:move #$8400,$96(a6)
  159. clear31:btst #$e,2(a6)
  160. bne.s clear31
  161. move #$400,$96(a6)
  162. move #20,$66(a6)    ;64-44
  163. move.l bpw,$54(a6)
  164. move.L #$1000000,$40(a6)
  165. move #[280*64]+22,$58(a6)
  166. rts
  167.  
  168. rectifzoom:
  169. lea angels2,a2
  170. recl1:move (a2),d0
  171. ext.l d0
  172. lsl.l #8,d0
  173. divs #128,d0
  174. move d0,(a2)+
  175. cmpi #$7777,(a2)
  176. bne.s recl1
  177. rts
  178.  
  179. ;*** 8,16 et 24 sont les vitesses de rotation
  180. ;mais attention a ce que les lignes ne sortent pas de l'ecran
  181.  
  182. calcule:
  183. addi #8,x+2
  184. andi #$7fe,x+2
  185. addi #16,y+2
  186. andi #$7fe,y+2
  187. addi #24,z+2
  188. andi #$7fe,z+2
  189. lea si,a0
  190. lea cos,a1
  191. lea angels2,a2
  192. lea coord,a3
  193. movem.L vide,d0-d7
  194. calculoop:
  195. movem.w (a2)+,d0/d1/d2
  196. move d0,d5
  197. move d1,d6
  198. x:move #$200,d3
  199. muls (a0,d3),d0    
  200. muls (a1,d3),d1
  201. sub.l d1,d0
  202. muls (a1,d3),d5
  203. move d6,d1
  204. muls (a0,d3),d1
  205. add.l d5,d1
  206. asr.l #8,d0
  207. asr.l #2,d0
  208. asr.l #8,d1
  209. asr.l #2,d1
  210. y:move #$600,d3
  211. move d1,d5
  212. move d2,d6
  213. muls (a0,d3),d1
  214. muls (a1,d3),d2
  215. sub.l d2,d1
  216. muls (a1,d3),d5
  217. move d6,d2
  218. muls (a0,d3),d2
  219. add.l d5,d2
  220. asr.l #2,d1
  221. asr.l #8,d2
  222. asr.l #2,d2
  223. z:move #$200,d3
  224. move d2,d5
  225. move d0,d6
  226. muls (a0,d3),d2
  227. muls (a1,d3),d0
  228. sub.l d0,d2
  229. muls (a1,d3),d5
  230. move d6,d0
  231. muls (a0,d3),d0
  232. add.l d5,d0
  233. asr.l #2,d0
  234. asr.l #8,d2
  235. asr.l #6,d2
  236.  
  237. add #300,d2
  238. divs d2,d0
  239. divs d2,d1
  240. addi #[22*128],d0
  241. addi #[111*16],d1
  242. move d0,(a3)+
  243. move d1,(a3)+
  244. cmpi #$7777,(a2)
  245. bne.L calculoop
  246. rts
  247.  
  248. draw:
  249. lea coord,a3
  250. Lea angels2l,a4
  251. movem.L vide,d0-d7
  252. move.L bpw,a0
  253. move #$8400,$96(a6)
  254. wbbl:btst #6,2(a6)
  255. bne.s wbbl
  256. move #$400,$96(a6)
  257. move.l #$ffff8000,$72(a6)
  258. move.l #-1,$44(a6)
  259. move.w #64,$60(a6)
  260. move.w #64,$66(a6)
  261.  
  262. drawloop1:
  263. move.b (a4)+,d0
  264. move.b (a4)+,d2
  265.  
  266. lsl.b #2,d0
  267. lsl.b #2,d2
  268. ext d0
  269. ext d2
  270.  
  271. move 2(a3,d0.w),d1
  272. move (a3,d0.w),d0
  273. move 2(a3,d2.w),d3
  274. move (a3,d2.w),d2
  275.  
  276. asr #4,d0
  277. asr #4,d1
  278. asr #4,d2
  279. asr #4,d3
  280.  
  281. cmp d0,d2
  282. bne.s draw1
  283. cmp d1,d3
  284. beq.s draw2
  285. draw1:
  286. bsr.s drawline
  287. draw2:
  288. cmpi.B #$77,(a4)
  289. bne.s drawloop1
  290. rts
  291.  
  292. drawline:
  293. move.l d1,d4
  294. lsl.l #6,d4
  295. moveq #-$10,d5
  296. and.w d0,d5
  297. lsr.w #3,d5
  298. add.w d5,d4
  299. add.l a0,d4
  300. clr.l d5
  301. sub.w d1,d3
  302. roxl.b #1,d5
  303. tst.w d3
  304. bge.s y2gy1
  305. neg.w d3
  306. y2gy1:
  307. sub.w d0,d2
  308. roxl.b #1,d5
  309. tst.w d2
  310. bge.s x2gx1
  311. neg.w d2
  312. x2gx1:
  313. move.w d3,d1
  314. sub.w d2,d1
  315. bge.s dygdx
  316. exg d2,d3
  317. dygdx:roxl.b #1,d5
  318. move.b table_octants(pc,d5),d5
  319. add.w d2,d2
  320. move #$8400,$96(a6)
  321. wblit:btst #6,$2(a6)
  322. bne.s wblit
  323. move #$400,$96(a6)
  324. move.w d2,$62(a6)
  325. sub.w d3,d2
  326. bge.s signnl
  327. or.b #$40,d5
  328. signnl:move.w d2,$52(a6)
  329. sub.w d3,d2
  330. move.w d2,$64(a6)
  331. and.w #$f,d0
  332. ror.w #4,d0
  333. or.w #$bca,d0
  334. move.w d0,$40(a6)
  335. move.w d5,$42(a6)
  336. move.l d4,$48(a6)
  337. move.l d4,$54(a6)
  338. lsl.w #6,d3
  339. addq.w #2,d3
  340. move.w d3,$58(a6)
  341. rts
  342.  
  343. table_octants:
  344. dc.b 1,17,9,21,5,25,13,29
  345. even
  346.  
  347. bpa:dc.L b3p1    ;bitplan affiché
  348. bpw:dc.L b3p2    ;bitplan travail
  349.  
  350. vide:blk.b 32,0
  351.  
  352. angels2:
  353. dc.w -600,100,400,-500,350,400,-400,100,400
  354.  
  355. dc.w -450,350,400,-300,350,400,-300,100,400
  356.  
  357. dc.w -125,225,400,-50,100,400,-225,100,400,-225,350,400
  358. dc.W 75,350,400,0,350,400,0,250,400,125,250,400
  359. dc.w 0,100,400,175,100,400
  360.  
  361. dc.W 250,350,400,250,100,400,600,100,400,400,350,400,500,350,400
  362. dc.w $7777
  363.  
  364. angels2l:
  365. dc.b 0,1,1,2,2,0
  366. dc.b 3,4,4,5
  367. dc.b 6,7,7,8,8,9,9,10,11,14,12,13,14,15
  368. dc.b 16,17,17,18,18,19,19,20
  369. dc.w $7777
  370.  
  371.  
  372. coord:blk.w 80,0
  373.  
  374.  
  375. clear:
  376. lea $dff000,a6
  377. move #$8400,$96(a6)
  378. clear1:
  379. btst #6,2(a6)
  380. bne.s clear1
  381. move #$400,$96(a6)
  382. move.L #$1000000,$40(a6)
  383. move #$14,$66(a6)
  384. move.L #bp1,$54(a6)
  385. move #[222*64]+22,$58(a6)
  386. rts
  387.  
  388. clear2:
  389. lea $dff000,a6
  390. move #$8400,$96(a6)
  391. clear5:
  392. btst #6,2(a6)
  393. bne.s clear5
  394. move #$400,$96(a6)
  395. move.L #$1000000,$40(a6)
  396. move #$14,$66(a6)
  397. move.L #bp3,$54(a6)
  398. move #[222*64]+22,$58(a6)
  399. rts
  400.  
  401. mod=0
  402. arg=4
  403. vmod=8
  404. varg=12
  405. modx=16
  406. cx=20
  407. cy=22
  408. typ=24
  409. adr=26
  410. img=28
  411. amod=30
  412.  
  413. nbdata=34
  414.  
  415. polaire:
  416. lea si,a6    ;sinus
  417. lea cos,a5
  418. ;lea bp1,a4
  419. lea bp2,a2
  420. lea table_images,a3
  421. ;lea det,a0
  422. move #39,d7
  423. poloop1:
  424. tst typ(a0)
  425. bmi.L polend
  426. beq.s pol2
  427. move adr(a0),d1
  428. move img(a0),d0
  429. not d0
  430. and d0,(a4,d1.w)
  431. bra.s pol3
  432. pol2:
  433. move adr(a0),d1
  434. move img(a0),d0
  435. not d0
  436. and d0,(a2,d1.w)
  437. pol3:
  438. move.l arg(a0),d0
  439. add.l varg(a0),d0
  440. move.l d0,arg(a0)
  441. swap d0
  442. and #$7fe,d0
  443.  
  444. move.L vmod(a0),d1
  445. add.L amod(a0),d1
  446. move.L d1,vmod(a0)
  447.  
  448. move.l mod(a0),d1
  449. add.l vmod(a0),d1
  450. move.l d1,mod(a0)
  451.  
  452. swap d1
  453.  
  454. move (a6,d0.w),d2
  455. move (a5,d0.w),d3
  456. muls d1,d2
  457. muls d1,d3
  458. asr.L #8,d2
  459. asr.L #8,d3
  460. asr.l #2,d2
  461. asr.l #2,d3
  462.  
  463. addi cy(a0),d2
  464. bmi.s pas_aff
  465. cmpi #221,d2
  466. bpl.s pas_aff
  467. addi cx(a0),d3
  468. bmi.s pas_aff
  469. cmpi #351,d3
  470. bpl.s pas_aff
  471.  
  472. tst typ(a0)
  473. bne.s pols2    
  474. ;pret a exploser ?
  475. tst.L vmod(a0)
  476. bmi.L explose
  477.  
  478. pols2:
  479.  
  480. move d3,d4
  481. ;mulu #44
  482. lsl #6,d2
  483. lsr #3,d3
  484. and #$fffe,d3
  485. add d3,d2
  486. and #$f,d4
  487. add d4,d4
  488. move (a3,d4.w),d4
  489. tst typ(a0)
  490. beq.s pol1
  491. or d4,(a4,d2.w)
  492. move d4,img(a0)
  493. move d2,adr(a0)
  494. polend:addi.L #nbdata,a0
  495. dbra d7,poloop1
  496. rts
  497. pol1:or d4,(a2,d2.w)
  498. move d4,img(a0)
  499. move d2,adr(a0)
  500. addi.L #nbdata,a0
  501. dbra d7,poloop1
  502. rts
  503.  
  504. pas_aff:
  505. move #-1,typ(a0)
  506. bra.s polend
  507.  
  508. table_images:dc.W $8000,$4000,$2000,$1000,$800,$400,$200,$100
  509. dc.w $80,$40,$20,$10,8,4,2,1
  510.  
  511.  
  512. typstop:dc.L 0
  513. typcount:dc.B 0
  514. even
  515.  
  516. lancer:
  517. dc.l $6000000,$20000
  518. dc.L $40000,$800000,-$900
  519. dc.l $5d80000,-$20000
  520. dc.L $40000,$600000,-$b00
  521. dc.l $6000000,-$7000
  522. dc.L $50000,$480000,-$1300
  523. dc.l $6100000,$40000
  524. dc.l $40000,$500000,-$e00
  525. dc.L $5f00000,-$30000
  526. dc.L $60000,$400000,-$1500
  527. dc.L $6000000,$4000
  528. dc.L $40000,$400000,-$1100
  529. dc.L $5f80000,-$2000
  530. dc.L $48000,$600000,-$1800
  531. dc.L $6100000,$c000
  532. dc.l $55000,$500000,-$1000
  533. dc.l $6000000,$60000
  534. dc.l $50000,$680000,-$1400
  535. dc.L $5e00000,-$20000
  536. dc.L $60000,$3c0000,-$1700
  537. dc.l $5f40000,-$8000
  538. dc.L $30000,$300000,-$1900
  539. dc.L $6000000,0
  540. dc.l $50000,$40000,-$1500
  541. dc.l $6050000,$d000
  542. dc.L $50000,$50000,-$1100
  543. dc.L $5f00000,-$4000
  544. dc.L $50000,$400000,-$1800
  545. dc.L $6000000,$30000
  546. dc.L $40000,$200000,-$1600
  547. dc.L $6000000,-$14000
  548. dc.L $48000,$400000,-$1000
  549. dc.l $5f00000,-$40000
  550. dc.l $40000,$500000,-$e00
  551. dc.L $6000000,-$10000
  552. dc.L $50000,$500000,-$1200
  553. dc.l $6080000,$30000
  554. dc.L $3b000,$400000,-$d00
  555. dc.w $7777
  556.  
  557. lancerc:dc.L lancer+20
  558.  
  559.  
  560.     ;***  -1:ligne suivante
  561.     ;     -2:decaler toute la prochaine ligne pour centrer
  562.     ;     le texte
  563. text1:
  564. dc.b -1
  565. dc.b -1
  566. dc.b "        ANGELS        ",-1,-2    ;centre 'Present'
  567. DC.B "       PRESENT       ",-1
  568. dc.B -1,-1,-1
  569. dc.B "       BEAST II",-1
  570. DC.B -1
  571. DC.B " 100% 2 DISKS VERSION",0    ;0=fini
  572.  
  573. dc.b "                      "    ;22 chars. maxi
  574.  
  575.     ;*** dc.b 1,2,3,4 : change speed
  576.     ;dc.b $80: stop scrolltext
  577.  
  578. text:
  579. ;dc.B 1,"   This is slow      ",2," This is medium       ",3
  580. ;dc.b "This is normal         ",4,"Thiiiiis iiiiiiiis"
  581. ;dc.B " faaaaaaaaaaaaaaast !!!        ",3
  582.  
  583. dc.B 3,"    --- ANGELS ---  ",2,32,1,32    ;centre a 22 chars.
  584. dc.b $80,1,32,2,32,3
  585. dc.b "bring you another quality crack called..."
  586. dc.B "  Shadow of the Beast II",$80
  587. dc.B "  from Psygnosis "
  588. dc.B "!   This is the two-disks 100%"
  589. dc.B " version of this game !   "
  590. dc.b "To contact us, write to ... ",1
  591. dc.b "P.O. Box 10 - 4504 - Obercorn - LUXEMBURG ... "
  592. dc.B "P.O. Box 3 - 6040 - Jumet - BELGIUM ... "
  593. dc.b "P.O. Box 31 - 9910 - Mariakerke - BELGIUM ... "
  594. dc.B "P.O. Box 2568 - 4300 - Sandnes - NORWAY   "
  595. dc.b "or call our boards ... "
  596. dc.b "Amiga East: 804-499-2266 (World HQ) ... "
  597. dc.b "Insider BBS: +39-564-415-697 (Euro HQ) ... "
  598. dc.b "World Trade Center: +41-170-11323 (Swiss HQ) ... "
  599. dc.B "Skyfox BBS: +49-911-353-571 (German HQ) ... "
  600. dc.b "City limits: +44-704-501-09 (England HQ) ... "
  601. dc.b "The Dutch Pirate: +31-011-723-66 (Holland HQ) ... "
  602. dc.b "Escape zone: 704-254-6448 ... "
  603. dc.B "Digital Expression: 813-398-7393 ... "
  604. dc.b "Wreck House: 201-751-2175 ... "
  605. dc.b "Reign in blood: +49-202-406-0981 ... "
  606. dc.B "House of Insanity: 813-584-6089      "
  607. dc.b "That's all !  "
  608. dc.B " Greetings to all our",3
  609. dc.b " friends and contacts all over the world !           "
  610. dc.b "This was ",2,"the Fireworks Intro"
  611. dc.b " coded by CORTO   "
  612. dc.b $7f," ANGELS 1990                          ",3,0
  613. even
  614. textptr:dc.l text
  615.  
  616. normal:
  617. lea text1,a0
  618. move.l #bp0,d2
  619. normall1:
  620. move.L d2,d1
  621. normall2:clr.l d0
  622. move.b (a0)+,d0
  623. tst.B d0
  624. beq.L ret
  625. cmpi.B #-1,d0
  626. beq.s line1
  627. cmpi.b #-2,d0
  628. bne.s norm1
  629. move.l #$8fca8000,con1+2
  630. bra.s normall2
  631. norm1:
  632. sub.b #$20,d0
  633. ;lsl.b #2,d0
  634. mulu #72,d0
  635. addi.l #fonts,d0
  636. bsr.L letter
  637. addq.L #2,d1
  638. bra.s normall2
  639. line1:
  640. addi.l #16*64,d2
  641. move.l #$0fca0000,con1+2
  642. bra.s normall1
  643.  
  644. print:
  645. tst.b textstop
  646. bne.L ret
  647. clr.l d0
  648. move.l textptr,a0
  649. move.b (a0)+,d0
  650. tst.b d0
  651. beq.s fini
  652. move.l a0,textptr
  653. cmpi.b #$80,d0
  654. beq.L spechg1
  655. cmpi.B #$20,d0
  656. blo.s spechg
  657. sub.b #$20,d0
  658. mulu #36,d0
  659. addi.l #font,d0
  660. move.L d0,a0
  661. lea scroll+44,a1
  662. move (a0)+,[46*0](a1)
  663. move (a0)+,[46*1](a1)
  664. move (a0)+,[46*2](a1)
  665. move (a0)+,[46*3](a1)
  666. move (a0)+,[46*4](a1)
  667. move (a0)+,[46*5](a1)
  668. move (a0)+,[46*6](a1)
  669. move (a0)+,[46*7](a1)
  670. move (a0)+,[46*8](a1)
  671. move (a0)+,[46*9](a1)
  672. move (a0)+,[46*10](a1)
  673. move (a0)+,[46*11](a1)
  674. move (a0)+,[46*12](a1)
  675. move (a0)+,[46*13](a1)
  676. move (a0)+,[46*14](a1)
  677. move (a0)+,[46*15](a1)
  678. move (a0)+,[46*16](a1)
  679. move (a0)+,[46*17](a1)
  680. ret:rts
  681. ret1:subq.B #1,textstop
  682. rts
  683. fini:
  684. move.l #text,textptr
  685. bra.L print
  686. spechg:
  687. subq.b #1,d0
  688. lsl #1,d0
  689. lea speedtable,a0
  690. move (a0,d0.w),d0
  691. move.b d0,delai2
  692. lsr #8,d0
  693. move.b d0,delai
  694. clr.b wait1
  695. bra.L print
  696. spechg1:move.B #150,textstop
  697. rts
  698. textstop:dc.B 0
  699. even
  700.  
  701. letter:    ;d0=font,d1=bp
  702. move #$8400,$96(a6)
  703. letter1:btst #6,2(a6)
  704. bne.s letter1
  705. move #$400,$96(a6)
  706. move.l d0,$50(a6)
  707. move.l d1,$54(a6)
  708. move.l d1,$48(a6)
  709. move.l d0,$4c(a6)
  710. con1:move.l #$fca0000,$40(a6)
  711. move.l #$ffff0000,$44(a6)
  712. move.w #60,$66(a6)
  713. move #60,$60(a6)
  714. clr.l $62(a6)
  715. move.w #[18*64]+2,$58(a6)
  716. rts
  717.  
  718. cycle:
  719. tst.b textstop
  720. bne.L ret1
  721. move #$8400,$96(a6)
  722. cyc1:btst #6,$2(a6)
  723. bne.s cyc1
  724. move #$400,$96(a6)
  725. move.l #scroll-2,$54(a6)
  726. move.l #scroll,$50(a6)
  727. move.l delai2,$40(a6)
  728. move.l #$ffffffff,$44(a6)
  729. clr.l $64(a6)
  730. move.w #1048,$58(a6)
  731. rts
  732.  
  733. save_all:
  734. move.L 4,a6
  735. jsr -132(a6)
  736. move.b #%10000111,$bfd100
  737. move.l $6c,save_vecteur_irq
  738. move.w $dff01c,save_intena
  739. or.w #$c000,save_intena
  740. move.w $dff002,save_dmacon
  741. or.w #$8100,save_dmacon
  742. rts
  743. restore_all:
  744. move.l save_vecteur_irq,$6c
  745. move.w #$7fff,$dff09a
  746. move.w save_intena,$dff09a
  747. move.w #$7fff,$dff096
  748. move.w save_dmacon,$dff096
  749. move.l 4,a6
  750. lea name_glib,a1
  751. moveq #0,d0
  752. jsr -552(a6)
  753. move.l d0,a0
  754. move.l 38(a0),$dff080
  755. clr.w $dff088
  756. move.L 4,a6
  757. jsr -138(a6)
  758. rts
  759. save_intena:dc.w 0
  760. save_dmacon:dc.w 0
  761. save_vecteur_irq:dc.l 0
  762. name_glib:dc.b "graphics.library",0
  763. even
  764.  
  765. makedet:
  766. lea det,a0
  767. move #79,d7
  768. mdl1:
  769. clr.L (a0)+
  770. move.l #$6000000,(a0)+
  771. move.L #$40000,(a0)+
  772. move.l #$20000,(a0)+    ;varg
  773. move.L #$800000,(a0)+    ;maxmod (modx)
  774. move #176,(a0)+        ;cx
  775. move #221,(a0)+        ;cy
  776. move #-1,(a0)+        ;type    -1=fini
  777. clr (a0)+        ;adr
  778. clr (a0)+        ;img
  779. move.L #-$900,(a0)+    ;amod
  780.  
  781. dbra d7,mdl1
  782.  
  783. lea det,a0
  784. bsr.s makefusee
  785. lea det+[50*nbdata],a0
  786. bsr.s makefusee
  787. rts
  788.  
  789. makefusee:
  790. move.L lancerc,a2
  791. clr.L (a0)+
  792. move.l (a2),(a0)+
  793. move.L 8(a2),(a0)+
  794. move.L 4(a2),(a0)+    ;varg
  795. move.L 12(a2),(a0)+    ;maxmod (modx)
  796. move #176,(a0)+        ;cx
  797. move #221,(a0)+        ;cy
  798. move.L a0,typstop
  799. move.B #150,typcount
  800. move #0,(a0)+        ;type    0=1e 1=eclats  2=arret
  801. clr (a0)+        ;adr
  802. clr (a0)+        ;img
  803. move.L 16(a2),(a0)+    ;amod
  804. addi.L #20,a2
  805. cmpi #$7777,(a2)
  806. bne.s mf1a
  807. lea lancer,a2
  808. mf1a:move.L a2,lancerc
  809. rts
  810.  
  811. explose:
  812.  
  813. ;*** Enlever la ligne suivante pour que l'ecran ne bouge plus
  814. ;a chaque explosion
  815.  
  816. ;move #$10,boum+2
  817.  
  818. cmpi.L #bp1,a4
  819. bne.s exp1
  820. bsr.L clear
  821. bra.s exp2
  822. exp1:
  823. bsr.L clear2
  824. exp2:
  825. move #39,d7
  826. move #$600,d4
  827. move.l #$40000,d5
  828. move.L a0,a1
  829. expl1:
  830. clr.l (a0)+
  831. move d4,(a0)+
  832. clr (a0)+
  833. move.L d5,(a0)+
  834. clr.L (a0)+
  835. move.L #$7fffffff,(a0)+
  836. move d3,(a0)+
  837. move d2,(a0)+
  838. move #1,(a0)+
  839. clr.L (a0)+
  840. clr.L (a0)+
  841. add d2,d5
  842. add d3,d5
  843. add d2,d5
  844. add $df0006,d5
  845. ;rol #4,d5
  846. andi.L #$3fc00,d5
  847. add d2,d4
  848. add d3,d4
  849. add d2,d4
  850. add $df0006,d4
  851. andi #$7fe,d4
  852. dbra d7,expl1
  853.  
  854.  
  855. move.L a1,a0
  856. makedet1:
  857. move.L lancerc,a2
  858. clr.L (a0)+
  859. move.l (a2),(a0)+
  860. move.L 8(a2),(a0)+
  861. move.L 4(a2),(a0)+    ;varg
  862. move.L 12(a2),(a0)+    ;maxmod (modx)
  863. move #176,(a0)+        ;cx
  864. move #221,(a0)+        ;cy
  865. move.L a0,typstop
  866. move.B #150,typcount
  867. move #0,(a0)+        ;type    0=1e 1=eclats  2=arret
  868. clr (a0)+        ;adr
  869. clr (a0)+        ;img
  870. move.L 16(a2),(a0)+    ;amod
  871. addi.L #20,a2
  872. cmpi #$7777,(a2)
  873. bne.s md1a
  874. lea lancer,a2
  875. md1a:move.L a2,lancerc
  876. move.L coltabc,a2
  877. move (a2)+,d0
  878. cmpi #$7777,(a2)
  879. bne.s md1b
  880. lea coltab,a2
  881. md1b:move.L a2,coltabc
  882. cmpi.l #bp3,a4
  883. beq.s exp5
  884. move d0,colmap1+2
  885. rts
  886. exp5:move d0,colmap2+2
  887. move d0,colmap2+6
  888. rts
  889.  
  890. coltab:dc.W $fff,$ff0,$f,$f00,$f0
  891. dc.w $f80,$ea6,$aaf
  892. dc.w $ff,$f0f,$ff0
  893. dc.w $80f,$f80,$f08,$fff,$f
  894. dc.W $8f8,$d5d,$08f,$cfc,$fc8,$af0,$f0a
  895. dc.W $fff,$fa0,$46f,$88f,$f84,$9d9,$b8f
  896. dc.W $7777
  897. coltabc:dc.l coltab
  898.  
  899. lastloop:dc.w 14
  900. coltab2:dc.w -$11,0
  901. dc.w -$100,1    ;bleu
  902. dc.w -1,$10    ;vert
  903. dc.w 0,$100    ;jaune
  904. dc.w -$10,1    ;violet
  905. dc.w -$100,$10    ;bleu-vert
  906. dc.w $7777
  907. coltab2c:dc.l coltab2
  908. makecopper:
  909. lea cop1+6,a0
  910. move lastloop,d7
  911. mcl1:
  912. move.l coltab2c,a1
  913. move (a0),d0
  914. move (a1)+,d1
  915. move (a1)+,d2
  916. add d1,d0
  917. add d2,d0
  918. move d0,(a0)
  919. move d0,d1
  920. move d0,d2
  921. addq.L #8,a0
  922. dbra d7,mcl1
  923. subq #1,lastloop
  924.  
  925. tst lastloop
  926. bmi.s mcl3
  927. rts
  928. mcl3:
  929. move #14,lastloop
  930. cmpi #$7777,(a1)
  931. bne.s mcl2
  932. lea coltab2,a1
  933. mcl2:
  934. move.l a1,coltab2c
  935. rts
  936.  
  937. copperlist:
  938. dc.L $8e2479,$9033c9,$920030,$9400d8
  939.  
  940. dc.l $1840ccc,$1860ccc,$18c0ccc,$18e0ccc
  941.  
  942. dc.L $1920fff,$1960fff,$19a0fff
  943. col3d:dc.L $19400b7,$19800b7,$19c00b7,$19e00b7
  944.  
  945. dc.L $2c0ffffe
  946. dc.l $1080002,$1001200,$1820f00
  947. dc.l $e00005,$e20000
  948. cop1:
  949. dc.L $2d0ffffe,$1820fff
  950. dc.L $2e0ffffe,$1820fff
  951. dc.L $2f0ffffe,$1820fff
  952. dc.L $300ffffe,$1820fff
  953. dc.L $310ffffe,$1820fff
  954. dc.L $320ffffe,$1820fff
  955. dc.L $330ffffe,$1820fff
  956. dc.L $340ffffe,$1820fff
  957. dc.L $350ffffe,$1820fff
  958. dc.L $360ffffe,$1820fff
  959. dc.L $370ffffe,$1820fff
  960. dc.L $380ffffe,$1820fff
  961. dc.L $390ffffe,$1820fff
  962. dc.L $3a0ffffe,$1820fff
  963. dc.L $3b0ffffe,$1820fff
  964. dc.L $3c0ffffe,$1820fff
  965.  
  966.  
  967. dc.l $3d0ffffe,$1000200
  968. boum:dc.l $1020000,$1040040,$1080014,$10a0014
  969. colmap1:dc.L $1820fff
  970. colmap2:dc.l $1880ff0,$18a0ff0
  971.  
  972. copbpl1:dc.w $e0,6,$e2,0,$e8,6,$ea,$4800,$f0,6,$f2,$9000
  973. dc.L $e40005,$e60400
  974. copbpl3d:dc.w $ec,5,$ee,$400,$f4,5,$f6,$400
  975.  
  976. dc.L $470ffffe,$1800002
  977. dc.L $480ffffe,$1800004
  978. dc.L $490ffffe,$1800007
  979. dc.L $4a0ffffe,$1800004
  980. dc.L $4b0ffffe,$1800002
  981. dc.L $4c0ffffe,$1800000
  982. dc.L $4d0ffffe,$1006600
  983.  
  984. dc.L $ffdffffe,$ffffe
  985. dc.L $2b0ffffe,$1001200,$1820fff
  986. dc.L $2c0ffffe,$1800002,$1820eee
  987. dc.L $2d0ffffe,$1800004,$1820ddd
  988. dc.l $2e0ffffe,$1800007,$1820ccc
  989. dc.l $2f0ffffe,$1800004,$1820bbb
  990. dc.l $300ffffe,$1800002,$1000200
  991. dc.L $310ffffe,$1800000,$1820fff
  992. dc.l $108ffa6,$1000200
  993.  
  994. dc.l -2
  995.  
  996. END_MUSIC:
  997. ;clr.w onoff
  998. clr.l $dff0a6
  999. clr.l $dff0b6
  1000. clr.l $dff0c6
  1001. clr.l $dff0d6
  1002. move.w #$000f,$dff096
  1003. rts
  1004.  
  1005. INIT_MUSIC:
  1006. ;move.w #1,onoff
  1007. lea MODULE(pc),a0
  1008. lea 100(a0),a1
  1009. lea    SEQpoint(pc),a5
  1010. move.l a1,(a5)
  1011. move.l a0,a1
  1012. add.l 8(a0),a1
  1013. lea    PATpoint(pc),a5
  1014. move.l a1,(a5)
  1015. move.l a0,a1
  1016. add.l 16(a0),a1
  1017. lea    FRQpoint(pc),a5
  1018. move.l a1,(a5)
  1019. move.l a0,a1
  1020. add.l 24(a0),a1
  1021. lea    VOLpoint(pc),a5
  1022. move.l a1,(a5)
  1023. move.l 4(a0),d0
  1024. divu #13,d0
  1025.  
  1026. lea 40(a0),a1
  1027. lea SOUNDINFO+4(pc),a2
  1028. moveq #10-1,d1
  1029. initloop:
  1030. move.w (a1)+,(a2)+
  1031. move.l (a1)+,(a2)+
  1032. addq.w #4,a2
  1033. dbf d1,initloop
  1034. moveq #0,d2
  1035. move.l a0,d1
  1036. add.l 32(a0),d1
  1037. lea    waveforms(pc),a5
  1038. sub.l a5,d1
  1039. lea SOUNDINFO(pc),a0
  1040. move.l d1,(a0)+
  1041. moveq #9-1,d3
  1042. initloop1:
  1043. move.w (a0),d2
  1044. add.l d2,d1
  1045. add.l d2,d1
  1046. addq.w #6,a0
  1047. move.l d1,(a0)+
  1048. dbf d3,initloop1
  1049.  
  1050. move.l SEQpoint(pc),a0
  1051. moveq #0,d2
  1052. move.b 12(a0),d2        ;Get replay speed
  1053. bne.s speedok
  1054. move.b #3,d2            ;Set default speed
  1055. speedok:
  1056. lea    respcnt(pc),a5
  1057. move.w d2,(a5)        ;Init repspeed counter
  1058. lea    repspd(pc),a5
  1059. move.w d2,(a5)
  1060. INIT2:
  1061. lea    audtemp(pc),a5
  1062. clr.w (a5)
  1063. move.w #$000f,$dff096        ;Disable audio DMA
  1064. move.w #$0780,$dff09a        ;Disable audio IRQ
  1065. moveq #0,d7
  1066. mulu #13,d0
  1067. moveq #4-1,d6            ;Number of soundchannels-1
  1068. lea V1data(pc),a0        ;Point to 1st voice data area
  1069. lea silent(pc),a1
  1070. lea o4a0c8(pc),a2
  1071. initloop2:
  1072. move.l a1,10(a0)
  1073. move.l a1,18(a0)
  1074. clr.l 14(a0)
  1075. clr.b 45(a0)
  1076. clr.b 47(a0)
  1077. clr.w 8(a0)
  1078. clr.l 48(a0)
  1079. move.b #$01,23(a0)
  1080. move.b #$01,24(a0)
  1081. clr.b 25(a0)
  1082. clr.l 26(a0)
  1083. clr.w 30(a0)
  1084. moveq #$00,d3
  1085. move.w (a2)+,d1
  1086. move.w (a2)+,d3
  1087. divu #$0003,d3
  1088. move.b d3,32(a0)
  1089. mulu #$0003,d3
  1090. andi.l #$00ff,d3
  1091. andi.l #$00ff,d1
  1092. addi.l #$dff0a0,d1
  1093. move.l d1,a6
  1094. move.l #$0000,(a6)
  1095. move.w #$0100,4(a6)
  1096. move.w #$0000,6(a6)
  1097. move.w #$0000,8(a6)
  1098. move.l d1,60(a0)
  1099. clr.w 64(a0)
  1100. move.l SEQpoint(pc),(a0)
  1101. move.l SEQpoint(pc),52(a0)
  1102. add.l d0,52(a0)
  1103. add.l d3,52(a0)
  1104. add.l d7,(a0)
  1105. add.l d3,(a0)
  1106. move.w #$000d,6(a0)
  1107. move.l (a0),a3
  1108. move.b (a3),d1
  1109. andi.l #$00ff,d1
  1110. lsl.w #6,d1
  1111. move.l PATpoint(pc),a4
  1112. adda.w d1,a4
  1113. move.l a4,34(a0)
  1114. clr.l 38(a0)
  1115. move.b #$01,33(a0)
  1116. move.b #$02,42(a0)
  1117. move.b 1(a3),44(a0)
  1118. move.b 2(a3),22(a0)
  1119. clr.b 43(a0)
  1120. clr.b 45(a0)
  1121. clr.w 56(a0)
  1122. adda.w #$004a,a0    ;Point to next voice's data area
  1123. dbf d6,initloop2
  1124. rts
  1125.  
  1126. PLAY:
  1127. lea pervol(pc),a6
  1128. ;tst.w onoff
  1129. ;bne.s music_on
  1130. ;rts
  1131. music_on:
  1132. lea    respcnt(pc),a5
  1133. subq.w #1,(a5)            ;Decrease replayspeed counter
  1134. bne.s nonewnote
  1135. move.w repspd(pc),(a5)        ;Restore replayspeed counter
  1136. lea V1data(pc),a0        ;Point to voice1 data area
  1137. bsr.L new_note
  1138. lea V2data(pc),a0        ;Point to voice2 data area
  1139. bsr.L new_note
  1140. lea V3data(pc),a0        ;Point to voice3 data area
  1141. bsr.L new_note
  1142. lea V4data(pc),a0        ;Point to voice4 data area
  1143. bsr.L new_note
  1144.  
  1145. nonewnote:
  1146. lea    audtemp(pc),a5
  1147. clr.w (a5)
  1148. lea V1data(pc),a0
  1149. bsr.L effects
  1150. move.w d0,(a6)+
  1151. move.w d1,(a6)+
  1152. lea V2data(pc),a0
  1153. bsr.L effects
  1154. move.w d0,(a6)+
  1155. move.w d1,(a6)+
  1156. lea V3data(pc),a0
  1157. bsr.L effects
  1158. move.w d0,(a6)+
  1159. move.w d1,(a6)+
  1160. lea V4data(pc),a0
  1161. bsr.L effects
  1162. move.w d0,(a6)+
  1163. move.w d1,(a6)+
  1164. lea pervol(pc),a6
  1165. move.w audtemp(pc),d0
  1166. ori.w #$8000,d0            ;Set/clr bit = 1
  1167. move.w d0,-(a7)
  1168. moveq #0,d1
  1169. move.l start1(pc),d2        ;Get samplepointers
  1170. move.w offset1(pc),d1        ;Get offset
  1171. add.l d1,d2            ;Add offset
  1172. move.l start2(pc),d3
  1173. move.w offset2(pc),d1
  1174. add.l d1,d3
  1175. move.l start3(pc),d4
  1176. move.w offset3(pc),d1
  1177. add.l d1,d4
  1178. move.l start4(pc),d5
  1179. move.w offset4(pc),d1
  1180. add.l d1,d5
  1181. move.w ssize1(pc),d0        ;Get sound lengths
  1182. move.w ssize2(pc),d1
  1183. move.w ssize3(pc),d6
  1184. move.w ssize4(pc),d7
  1185. move.w (a7)+,$dff096        ;Enable audio DMA
  1186. chan1:
  1187. lea V1data(pc),a0
  1188. tst.w 72(a0)
  1189. beq.l chan2
  1190. subq.w #1,72(a0)
  1191. cmpi.w #1,72(a0)
  1192. bne.s chan2
  1193. clr.w 72(a0)
  1194. move.l d2,$dff0a0        ;Set soundstart
  1195. move.w d0,$dff0a4        ;Set soundlength
  1196. chan2:
  1197. lea V2data(pc),a0
  1198. tst.w 72(a0)
  1199. beq.s chan3
  1200. subq.w #1,72(a0)
  1201. cmpi.w #1,72(a0)
  1202. bne.s chan3
  1203. clr.w 72(a0)
  1204. move.l d3,$dff0b0
  1205. move.w d1,$dff0b4
  1206. chan3:
  1207. lea V3data(pc),a0
  1208. tst.w 72(a0)
  1209. beq.s chan4
  1210. subq.w #1,72(a0)
  1211. cmpi.w #1,72(a0)
  1212. bne.s chan4
  1213. clr.w 72(a0)
  1214. move.l d4,$dff0c0
  1215. move.w d6,$dff0c4
  1216. chan4:
  1217. lea V4data(pc),a0
  1218. tst.w 72(a0)
  1219. beq.s setpervol
  1220. subq.w #1,72(a0)
  1221. cmpi.w #1,72(a0)
  1222. bne.s setpervol
  1223. clr.w 72(a0)
  1224. move.l d5,$dff0d0
  1225. move.w d7,$dff0d4
  1226. setpervol:
  1227. lea $dff0a6,a5
  1228. move.w (a6)+,(a5)    ;Set period
  1229. move.w (a6)+,2(a5)    ;Set volume
  1230. move.w (a6)+,16(a5)
  1231. move.w (a6)+,18(a5)
  1232. move.w (a6)+,32(a5)
  1233. move.w (a6)+,34(a5)
  1234. move.w (a6)+,48(a5)
  1235. move.w (a6)+,50(a5)
  1236. rts
  1237.  
  1238. NEW_NOTE:
  1239. moveq #0,d5
  1240. move.l 34(a0),a1
  1241. adda.w 40(a0),a1
  1242. cmp.w #64,40(a0)
  1243. bne.s samepat
  1244. move.l (a0),a2
  1245. adda.w 6(a0),a2        ;Point to next sequence row
  1246. cmpa.l 52(a0),a2    ;Is it the end?
  1247. bne.s notend
  1248. move.w d5,6(a0)        ;yes!
  1249. move.l (a0),a2        ;Point to first sequence
  1250. notend:
  1251. moveq #0,d1
  1252. lea    spdtemp(pc),a5
  1253. addq.b #1,(a5)
  1254. cmpi.b #4,(a5)
  1255. bne.s nonewspd
  1256. move.b d5,(a5)
  1257. move.b -1(a1),d1    ;Get new replay speed
  1258. beq.s nonewspd
  1259. lea    respcnt(pc),a5
  1260. move.w d1,(a5)        ;store in counter
  1261. lea    repspd(pc),a5
  1262. move.w d1,(a5)
  1263. nonewspd:
  1264. move.b (a2),d1        ;Pattern to play
  1265. move.b 1(a2),44(a0)    ;Transpose value
  1266. move.b 2(a2),22(a0)    ;Soundtranspose value
  1267.  
  1268. move.w d5,40(a0)
  1269. lsl.w #6,d1
  1270. add.l PATpoint(pc),d1    ;Get pattern pointer
  1271. move.l d1,34(a0)
  1272. addi.w #$000d,6(a0)
  1273. move.l d1,a1
  1274. samepat:
  1275. move.b 1(a1),d1        ;Get info byte
  1276. move.b (a1)+,d0        ;Get note
  1277. bne.s ww1
  1278. andi.w #%11000000,d1
  1279. beq.s noport
  1280. bra.s ww11
  1281. ww1:
  1282. move.w d5,56(a0)
  1283. ww11:
  1284. move.b d5,47(a0)
  1285. move.b (a1),31(a0)
  1286.  
  1287.         ;31(a0) = PORTAMENTO/INSTR. info
  1288.             ;Bit 7 = portamento on
  1289.             ;Bit 6 = portamento off
  1290.             ;Bit 5-0 = instrument number
  1291.         ;47(a0) = portamento value
  1292.             ;Bit 7-5 = always zero
  1293.             ;Bit 4 = up/down
  1294.             ;Bit 3-0 = value
  1295. t_porton:
  1296. btst #7,d1
  1297. beq.s noport
  1298. move.b 2(a1),47(a0)    
  1299. noport:
  1300. andi.w #$007f,d0
  1301. beq.s nextnote
  1302. move.b d0,8(a0)
  1303. move.b (a1),9(a0)
  1304. move.b 32(a0),d2
  1305. moveq #0,d3
  1306. bset d2,d3
  1307. lea    audtemp(pc),a5
  1308. or.w d3,(a5)
  1309. move.w d3,$dff096
  1310. move.b (a1),d1
  1311. andi.w #$003f,d1    ;Max 64 instruments
  1312. add.b 22(a0),d1
  1313. move.l VOLpoint(pc),a2
  1314. lsl.w #6,d1
  1315. adda.w d1,a2
  1316. move.w d5,16(a0)
  1317. move.b (a2),23(a0)
  1318. move.b (a2)+,24(a0)
  1319. move.b (a2)+,d1
  1320. andi.w #$00ff,d1
  1321. move.b (a2)+,27(a0)
  1322. move.b #$40,46(a0)
  1323. move.b (a2)+,d0
  1324. move.b d0,28(a0)
  1325. move.b d0,29(a0)
  1326. move.b (a2)+,30(a0)
  1327. move.l a2,10(a0)
  1328. move.l FRQpoint(pc),a2
  1329. lsl.w #6,d1
  1330. adda.w d1,a2
  1331. move.l a2,18(a0)
  1332. move.w d5,50(a0)
  1333. move.b d5,26(a0)
  1334. move.b d5,25(a0)
  1335. nextnote:
  1336. addq.w #2,40(a0)
  1337. rts
  1338.  
  1339. EFFECTS:
  1340. moveq #0,d7
  1341. testsustain:
  1342. tst.b 26(a0)        ;Is sustain counter = 0
  1343. beq.s sustzero
  1344. subq.b #1,26(a0)    ;if no, decrease counter
  1345. bra.L VOLUfx
  1346. sustzero:        ;Next part of effect sequence
  1347. move.l 18(a0),a1    ;can be executed now.
  1348. adda.w 50(a0),a1
  1349. testeffects:
  1350. cmpi.b #$e1,(a1)    ;E1 = end of FREQseq sequence
  1351. beq.L VOLUfx
  1352. cmpi.b #$e0,(a1)    ;E0 = loop to other part of sequence
  1353. bne.s testnewsound
  1354. move.b 1(a1),d0        ;loop to start of sequence + 1(a1)
  1355. andi.w #$003f,d0
  1356. move.w d0,50(a0)
  1357. move.l 18(a0),a1
  1358. adda.w d0,a1
  1359. testnewsound:
  1360. cmpi.b #$e2,(a1)    ;E2 = set waveform
  1361. bne.s o49c64
  1362. moveq #0,d0
  1363. moveq #0,d1
  1364. move.b 32(a0),d1
  1365. bset d1,d0
  1366. lea    audtemp(pc),a5
  1367. or.w d0,(a5)
  1368. move.w d0,$dff096
  1369. move.b 1(a1),d0
  1370. andi.w #$00ff,d0
  1371. lea SOUNDINFO(pc),a4
  1372. add.w d0,d0
  1373. move.w d0,d1
  1374. add.w d1,d1
  1375. add.w d1,d1
  1376. add.w d1,d0
  1377. adda.w d0,a4
  1378. move.l 60(a0),a3
  1379. move.l (a4),d1
  1380. lea    waveforms(pc),a5
  1381. add.l a5,d1
  1382. move.l d1,(a3)
  1383. move.l d1,68(a0)
  1384. move.w 4(a4),4(a3)
  1385. move.l 6(a4),64(a0)
  1386. swap d1
  1387. move.w #$0003,72(a0)
  1388. tst.w d1
  1389. bne.s o49c52
  1390. move.w #$0002,72(a0)
  1391. o49c52:
  1392. clr.w 16(a0)
  1393. move.b #$01,23(a0)
  1394. addq.w #2,50(a0)
  1395. bra.L o49d02
  1396. o49c64:
  1397. cmpi.b #$e4,(a1)
  1398. bne.s testpatjmp
  1399. move.b 1(a1),d0
  1400. andi.w #$00ff,d0
  1401. lea SOUNDINFO(pc),a4
  1402. add.w d0,d0
  1403. move.w d0,d1
  1404. add.w d1,d1
  1405. add.w d1,d1
  1406. add.w d1,d0
  1407. adda.w d0,a4
  1408. move.l 60(a0),a3
  1409. move.l (a4),d1
  1410. lea    waveforms(pc),a5
  1411. add.l a5,d1
  1412. move.l d1,(a3)
  1413. move.l d1,68(a0)
  1414. move.w 4(a4),4(a3)
  1415. move.l 6(a4),64(a0)
  1416.  
  1417. swap d1
  1418. move.w #$0003,72(a0)
  1419. tst.w d1
  1420. bne.s o49cae
  1421. move.w #$0002,72(a0)
  1422. o49cae:
  1423. addq.w #2,50(a0)
  1424. bra.s o49d02
  1425. testpatjmp:
  1426. cmpi.b #$e7,(a1)
  1427. bne.s testnewsustain
  1428. move.b 1(a1),d0
  1429. andi.w #$00ff,d0
  1430. lsl.w #6,d0
  1431. move.l FRQpoint(pc),a1
  1432. adda.w d0,a1
  1433. move.l a1,18(a0)
  1434. move.w d7,50(a0)
  1435. bra.L testeffects
  1436. testnewsustain:
  1437. cmpi.b #$e8,(a1)    ;E8 = set sustain time
  1438. bne.s o49cea
  1439. move.b 1(a1),26(a0)
  1440. addq.w #2,50(a0)
  1441. bra.L testsustain
  1442. o49cea:
  1443. cmpi.b #$e3,(a1)
  1444. bne.s o49d02
  1445. addq.w #3,50(a0)
  1446. move.b 1(a1),27(a0)
  1447. move.b 2(a1),28(a0)
  1448. o49d02:
  1449. move.l 18(a0),a1
  1450. adda.w 50(a0),a1
  1451. move.b (a1),43(a0)
  1452. addq.w #1,50(a0)
  1453. VOLUfx:
  1454. tst.b 25(a0)
  1455. beq.s o49d1e
  1456. subq.b #1,25(a0)
  1457. bra.s o49d70
  1458. o49d1e:
  1459. subq.b #1,23(a0)
  1460. bne.s o49d70
  1461. move.b 24(a0),23(a0)
  1462. o49d2a:
  1463. move.l 10(a0),a1
  1464. adda.w 16(a0),a1
  1465. move.b (a1),d0
  1466. cmpi.b #$e8,d0
  1467. bne.s o49d4a
  1468. addq.w #2,16(a0)
  1469. move.b 1(a1),25(a0)
  1470. bra.s VOLUfx
  1471. o49d4a:
  1472. cmpi.b #$e1,d0
  1473. beq.s o49d70
  1474. cmpi.b #$e0,d0
  1475. bne.s o49d68
  1476. move.b 1(a1),d0
  1477. andi.l #$003f,d0
  1478. subq.b #5,d0
  1479. move.w d0,16(a0)
  1480. bra.s o49d2a
  1481. o49d68:
  1482. move.b (a1),45(a0)
  1483. addq.w #1,16(a0)
  1484. o49d70:
  1485. move.b 43(a0),d0
  1486. bmi.s o49d7e
  1487. add.b 8(a0),d0
  1488. add.b 44(a0),d0
  1489. o49d7e:
  1490. andi.w #$007f,d0
  1491. lea PERIODS(pc),a1
  1492. add.w d0,d0
  1493. move.w d0,d1
  1494. adda.w d0,a1
  1495. move.w (a1),d0
  1496. move.b 46(a0),d7
  1497. tst.b 30(a0)
  1498. beq.s o49d9e
  1499. subq.b #1,30(a0)
  1500.  
  1501. bra.s o49df4
  1502. o49d9e:
  1503. move.b d1,d5
  1504. move.b 28(a0),d4
  1505. add.b d4,d4
  1506. move.b 29(a0),d1
  1507. tst.b d7
  1508. bpl.s o49db4
  1509. btst #0,d7
  1510. bne.s o49dda
  1511. o49db4:
  1512. btst #5,d7
  1513. bne.s o49dc8
  1514. sub.b 27(a0),d1
  1515. bcc.s o49dd6
  1516. bset #5,d7
  1517. moveq #0,d1
  1518. bra.s o49dd6
  1519. o49dc8:
  1520. add.b 27(a0),d1
  1521. cmp.b d4,d1
  1522. bcs.s o49dd6
  1523. bclr #5,d7
  1524. move.b d4,d1
  1525. o49dd6:
  1526. move.b d1,29(a0)
  1527. o49dda:
  1528. lsr.b #1,d4
  1529. sub.b d4,d1
  1530. bcc.s o49de4
  1531. subi.w #$0100,d1
  1532. o49de4:
  1533. addi.b #$a0,d5
  1534. bcs.s o49df2
  1535. o49dea:
  1536. add.w d1,d1
  1537. addi.b #$18,d5
  1538. bcc.s o49dea
  1539. o49df2:
  1540. add.w d1,d0
  1541. o49df4:
  1542. eori.b #$01,d7
  1543. move.b d7,46(a0)
  1544.  
  1545. ; DO THE PORTAMENTO THING
  1546. moveq #0,d1
  1547. move.b 47(a0),d1    ;get portavalue
  1548. beq.s a56d0        ;0=no portamento
  1549. cmpi.b #$1f,d1
  1550. bls.s portaup
  1551. portadown: 
  1552. andi.w #$1f,d1
  1553. neg.w d1
  1554. portaup:
  1555. sub.w d1,56(a0)
  1556. a56d0:
  1557. add.w 56(a0),d0
  1558. o49e3e:
  1559. cmpi.w #$0070,d0
  1560. bhi.s nn1
  1561. move.w #$0071,d0
  1562. nn1:
  1563. cmpi.w #$06b0,d0
  1564. bls.s nn2
  1565. move.w #$06b0,d0
  1566. nn2:
  1567. moveq #0,d1
  1568. move.b 45(a0),d1
  1569. rts
  1570.  
  1571. pervol: blk.b 16,0    ;Periods & Volumes temp. store
  1572. respcnt: dc.w 0        ;Replay speed counter 
  1573. repspd:  dc.w 0        ;Replay speed counter temp
  1574. firseq:     dc.w 0        ;First sequence
  1575. lasseq:     dc.w 0        ;Last sequence
  1576. audtemp: dc.w 0
  1577. spdtemp: dc.w 0
  1578.  
  1579. V1data:  blk.b 64,0    ;Voice 1 data area
  1580. offset1: blk.b 02,0    ;Is added to start of sound
  1581. ssize1:  blk.b 02,0    ;Length of sound
  1582. start1:  blk.b 06,0    ;Start of sound
  1583.  
  1584. V2data:  blk.b 64,0    ;Voice 2 data area
  1585. offset2: blk.b 02,0
  1586. ssize2:  blk.b 02,0
  1587. start2:  blk.b 06,0
  1588.  
  1589. V3data:  blk.b 64,0    ;Voice 3 data area
  1590. offset3: blk.b 02,0
  1591. ssize3:  blk.b 02,0
  1592. start3:  blk.b 06,0
  1593.  
  1594. V4data:  blk.b 64,0    ;Voice 4 data area
  1595. offset4: blk.b 02,0
  1596. ssize4:  blk.b 02,0
  1597. start4:  blk.b 06,0
  1598.  
  1599. o4a0c8: dc.l $00000000,$00100003,$00200006,$00300009
  1600. SEQpoint: dc.l 0
  1601. PATpoint: dc.l 0
  1602. FRQpoint: dc.l 0
  1603. VOLpoint: dc.l 0
  1604.  
  1605. SILENT: dc.w $0100,$0000,$0000,$00e1
  1606.  
  1607. PERIODS:dc.w $06b0,$0650,$05f4,$05a0,$054c,$0500,$04b8,$0474
  1608.     dc.w $0434,$03f8,$03c0,$038a,$0358,$0328,$02fa,$02d0
  1609.     dc.w $02a6,$0280,$025c,$023a,$021a,$01fc,$01e0,$01c5
  1610.     dc.w $01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d
  1611.     dc.w $010d,$00fe,$00f0,$00e2,$00d6,$00ca,$00be,$00b4
  1612.     dc.w $00aa,$00a0,$0097,$008f,$0087,$007f,$0078,$0071
  1613.     dc.w $0071,$0071,$0071,$0071,$0071,$0071,$0071,$0071
  1614.     dc.w $0071,$0071,$0071,$0071,$0d60,$0ca0,$0be8,$0b40
  1615.     dc.w $0a98,$0a00,$0970,$08e8,$0868,$07f0,$0780,$0714
  1616.     dc.w $1ac0,$1940,$17d0,$1680,$1530,$1400,$12e0,$11d0
  1617.     dc.w $10d0,$0fe0,$0f00,$0e28
  1618.  
  1619. SOUNDINFO:
  1620. ;Offset.l , Sound-length.w , Start-offset.w , Repeat-length.w 
  1621.  
  1622. ;Reserved for samples
  1623.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1624.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1625.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1626.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1627.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1628.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1629.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1630.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1631.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1632.     dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
  1633. ;Reserved for synth sounds
  1634.     dc.w $0000,$0000 ,$0010 ,$0000 ,$0010 
  1635.     dc.w $0000,$0020 ,$0010 ,$0000 ,$0010 
  1636.     dc.w $0000,$0040 ,$0010 ,$0000 ,$0010 
  1637.     dc.w $0000,$0060 ,$0010 ,$0000 ,$0010 
  1638.     dc.w $0000,$0080 ,$0010 ,$0000 ,$0010 
  1639.     dc.w $0000,$00a0 ,$0010 ,$0000 ,$0010 
  1640.     dc.w $0000,$00c0 ,$0010 ,$0000 ,$0010 
  1641.     dc.w $0000,$00e0 ,$0010 ,$0000 ,$0010 
  1642.     dc.w $0000,$0100 ,$0010 ,$0000 ,$0010 
  1643.     dc.w $0000,$0120 ,$0010 ,$0000 ,$0010 
  1644.     dc.w $0000,$0140 ,$0010 ,$0000 ,$0010 
  1645.     dc.w $0000,$0160 ,$0010 ,$0000 ,$0010 
  1646.     dc.w $0000,$0180 ,$0010 ,$0000 ,$0010 
  1647.     dc.w $0000,$01a0 ,$0010 ,$0000 ,$0010 
  1648.     dc.w $0000,$01c0 ,$0010 ,$0000 ,$0010 
  1649.     dc.w $0000,$01e0 ,$0010 ,$0000 ,$0010 
  1650.     dc.w $0000,$0200 ,$0010 ,$0000 ,$0010 
  1651.     dc.w $0000,$0220 ,$0010 ,$0000 ,$0010 
  1652.     dc.w $0000,$0240 ,$0010 ,$0000 ,$0010 
  1653.     dc.w $0000,$0260 ,$0010 ,$0000 ,$0010 
  1654.     dc.w $0000,$0280 ,$0010 ,$0000 ,$0010 
  1655.     dc.w $0000,$02a0 ,$0010 ,$0000 ,$0010 
  1656.     dc.w $0000,$02c0 ,$0010 ,$0000 ,$0010 
  1657.     dc.w $0000,$02e0 ,$0010 ,$0000 ,$0010 
  1658.     dc.w $0000,$0300 ,$0010 ,$0000 ,$0010 
  1659.     dc.w $0000,$0320 ,$0010 ,$0000 ,$0010 
  1660.     dc.w $0000,$0340 ,$0010 ,$0000 ,$0010 
  1661.     dc.w $0000,$0360 ,$0010 ,$0000 ,$0010 
  1662.     dc.w $0000,$0380 ,$0010 ,$0000 ,$0010 
  1663.     dc.w $0000,$03a0 ,$0010 ,$0000 ,$0010 
  1664.     dc.w $0000,$03c0 ,$0010 ,$0000 ,$0010 
  1665.     dc.w $0000,$03e0 ,$0010 ,$0000 ,$0010 
  1666.     dc.w $0000,$0400 ,$0008 ,$0000 ,$0008 
  1667.     dc.w $0000,$0410 ,$0008 ,$0000 ,$0008 
  1668.     dc.w $0000,$0420 ,$0008 ,$0000 ,$0008 
  1669.     dc.w $0000,$0430 ,$0008 ,$0000 ,$0008 
  1670.     dc.w $0000,$0440 ,$0008 ,$0000 ,$0008
  1671.     dc.w $0000,$0450 ,$0008 ,$0000 ,$0008
  1672.     dc.w $0000,$0460 ,$0008 ,$0000 ,$0008
  1673.     dc.w $0000,$0470 ,$0008 ,$0000 ,$0008
  1674.     dc.w $0000,$0480 ,$0010 ,$0000 ,$0010
  1675.     dc.w $0000,$04a0 ,$0008 ,$0000 ,$0008
  1676.     dc.w $0000,$04b0 ,$0010 ,$0000 ,$0010
  1677.     dc.w $0000,$04d0 ,$0010 ,$0000 ,$0010
  1678.     dc.w $0000,$04f0 ,$0008 ,$0000 ,$0008
  1679.     dc.w $0000,$0500 ,$0008 ,$0000 ,$0008
  1680.     dc.w $0000,$0510 ,$0018 ,$0000 ,$0018
  1681.  
  1682. WAVEFORMS:
  1683. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1684. dc.w $3f37,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1685. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1686. dc.w $c037,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1687. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1688. dc.w $c0b8,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1689. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1690. dc.w $c0b8,$b027,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1691. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1692. dc.w $c0b8,$b0a8,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1693. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1694. dc.w $c0b8,$b0a8,$a017,$0f07,$ff07,$0f17,$1f27,$2f37
  1695. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1696. dc.w $c0b8,$b0a8,$a098,$0f07,$ff07,$0f17,$1f27,$2f37
  1697. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1698. dc.w $c0b8,$b0a8,$a098,$9007,$ff07,$0f17,$1f27,$2f37
  1699. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1700. dc.w $c0b8,$b0a8,$a098,$9088,$ff07,$0f17,$1f27,$2f37
  1701. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1702. dc.w $c0b8,$b0a8,$a098,$9088,$8007,$0f17,$1f27,$2f37
  1703. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1704. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$0f17,$1f27,$2f37
  1705. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1706. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9017,$1f27,$2f37
  1707. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1708. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$1f27,$2f37
  1709. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1710. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a027,$2f37
  1711. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1712. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$2f37
  1713. dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1714. dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$b037
  1715. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1716. dc.w $7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1717. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1718. dc.w $817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1719. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1720. dc.w $8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1721. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1722. dc.w $8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1723. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1724. dc.w $8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1725. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1726. dc.w $8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1727. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1728. dc.w $8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1729. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1730. dc.w $8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f
  1731. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1732. dc.w $8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f
  1733. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1734. dc.w $8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f
  1735. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1736. dc.w $8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f
  1737. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1738. dc.w $8181,$8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f
  1739. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1740. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f
  1741. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1742. dc.w $8181,$8181,$8181,$8181,$8181,$8181,$817f,$7f7f
  1743. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1744. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$7f7f
  1745. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1746. dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$807f
  1747. dc.w $8080,$8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f
  1748. dc.w $8080,$8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f
  1749. dc.w $8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1750. dc.w $8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1751. dc.w $8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1752. dc.w $8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1753. dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1754. dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1755. dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1756. dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1757. dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1758. dc.w $4545,$797d,$7a77,$7066,$6158,$534d,$2c20,$1812
  1759. dc.w $04db,$d3cd,$c6bc,$b5ae,$a8a3,$9d99,$938e,$8b8a
  1760. dc.w $4545,$797d,$7a77,$7066,$5b4b,$4337,$2c20,$1812
  1761. dc.w $04f8,$e8db,$cfc6,$beb0,$a8a4,$9e9a,$9594,$8d83
  1762. dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1763. dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1764. dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1765. dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1766. dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1767.  
  1768. MODULE:
  1769. incbin "mod.tristar"    ;*** ici pour changer la zik
  1770.  
  1771.  
  1772. si:
  1773. incbin "sincos"
  1774. cos=si+$200
  1775.  
  1776. det:blk.b 100*nbdata
  1777.  
  1778.  
  1779. font:
  1780. incbin "globulus"
  1781.  
  1782. end:
  1783. fonts:blk.b 3456*2
  1784. scroll=$50000+46
  1785. bp0=$50400
  1786.  
  1787. bp1=$60000
  1788. bp2=$64800
  1789. bp3=$69000
  1790. b3p1=$6d800
  1791. b3p2=$71e00
  1792.